Java Swing ๋ฐ์ดํฐ ์ฐ๋: UI์ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ฐ๊ฒฐํ๊ธฐ
์๋ฐ ์ค์(Java Swing) ๊ฐ๋ฐ์์ ๊ฐ์ฅ ์ค์ํ ์์น ์ค ํ๋๋ ํ๋ฉด(View)๊ณผ ๋ฐ์ดํฐ(Model)์ ๋ถ๋ฆฌ์ ๋๋ค. ๋จ์ํ ์ปดํฌ๋ํธ์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ๋ฐฉ์์์ ๋ฒ์ด๋, ๋ฐ์ดํฐ ๋ชจ๋ธ์ ํ์ฉํด UI๋ฅผ ๋๊ธฐํํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค.
1. ํ ์คํธ ํ๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๊ฐ์
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฐ์งํ๊ฑฐ๋ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๊ฐ์ ธ์ค๊ธฐ:
textField.getText()๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ๊ฐ์ ธ์ต๋๋ค. - ์ค์๊ฐ ๊ฐ์:
DocumentListener๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธ์๊ฐ ์ ๋ ฅ๋ ๋๋ง๋ค ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
JTextField textField = new JTextField();
textField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) { update(); }
public void removeUpdate(DocumentEvent e) { update(); }
public void insertUpdate(DocumentEvent e) { update(); }
public void update() {
System.out.println("์
๋ ฅ ๋ด์ฉ: " + textField.getText());
}
});2. ํ ์ด๋ธ ๋ฐ์ดํฐ ์ฐ๋ (JTable๊ณผ TableModel)
์ค์์์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ธ **JTable**์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ฃ์ง ์๊ณ ๋ฐ๋์ **TableModel**์ ํตํด ์ฐ๋ํด์ผ ํฉ๋๋ค.
โ ๊ธฐ๋ณธ ๋ฐฉ์ (DefaultTableModel)
๊ฐ์ฅ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ/์ญ์ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
String[] columns = {"ID", "์ด๋ฆ", "์ด๋ฉ์ผ"};
DefaultTableModel model = new DefaultTableModel(columns, 0);
JTable table = new JTable(model);
// ๋ฐ์ดํฐ ์ถ๊ฐ
model.addRow(new Object[]{"1", "ํ๊ธธ๋", "[email protected]"});
// ๋ฐ์ดํฐ ์ญ์ (์ฒซ ๋ฒ์งธ ํ)
model.removeRow(0);โก ๊ณ ๊ธ ๋ฐฉ์ (AbstractTableModel)
์ค์ ๋น์ฆ๋์ค ๊ฐ์ฒด(List<User> ๋ฑ)์ ํ
์ด๋ธ์ ์ง์ ์ฐ๊ฒฐํ๊ณ ์ถ์ ๋ ์์๋ฐ์ ๊ตฌํํฉ๋๋ค. ๋ฐ์ดํฐ์ ์๋ณธ์ด ๋ฐ๋๋ฉด ํ๋ฉด์ด ์๋์ผ๋ก ๊ฐฑ์ ๋๋๋ก ์ ์ดํ ์ ์์ต๋๋ค.
3. UI ์ ๋ฐ์ดํธ ์ ์ฃผ์์ฌํญ (๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ)
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋คํธ์ํฌ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ UI์ ๋ฟ๋ ค์ค ๋๋ ํญ์ **EDT(Event Dispatch Thread)**๋ฅผ ๊ฑฐ์ณ์ผ ํจ์ ์์ง ๋ง์ธ์.
// ๋ณ๋ ์ค๋ ๋์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ํ
List<User> userList = db.findAllUsers();
// UI ์
๋ฐ์ดํธ๋ ๋ฐ๋์ SwingUtilities๋ฅผ ์ฌ์ฉ
SwingUtilities.invokeLater(() -> {
for (User user : userList) {
model.addRow(new Object[]{user.getId(), user.getName()});
}
});4. ์ค๋ฌด ํจํด: POJO์ UI ์ฑํฌ ๋ง์ถ๊ธฐ
๋จ์ํ getText()๋ฅผ ์ฐ๋ ๊ฒ๋ณด๋ค, ๋ณ๋์ **๋ฐ์ดํฐ ๊ฐ์ฒด(POJO)**๋ฅผ ์ ์ํ๊ณ ์ปดํฌ๋ํธ์ ๊ฐ์ ๊ฐ์ฒด์ ๋ด์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ ์ง๋ณด์์ ์ ๋ฆฌํฉ๋๋ค.
- ํ๋ฉด โ ๊ฐ์ฒด: '์ ์ฅ' ๋ฒํผ ํด๋ฆญ ์ ๋ชจ๋ ํ
์คํธ ํ๋์ ๊ฐ์
User๊ฐ์ฒด์ ์ธํ ํฉ๋๋ค. - ๊ฐ์ฒด โ ํ๋ฉด: '์์ ' ๋ฒํผ ํด๋ฆญ ์
User๊ฐ์ฒด์ ๊ฐ์ ๊ฐ ํ ์คํธ ํ๋์setText()ํด์ค๋๋ค.
5. ์์ฝ
- ๊ฐ๋จํ ์
๋ ฅ์ **
getText()/setText()**๋ก ์ถฉ๋ถํฉ๋๋ค. - ๋ณต์กํ ๋ชฉ๋ก(Table, List)์ ๋ฐ๋์ Model ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ธ์.
- ๋๋์ ๋ฐ์ดํฐ๋ฅผ UI์ ์ฐ๋ํ ๋๋ ์ค๋ ๋ ๋ถ๋ฆฌ๊ฐ ํ์์ ๋๋ค.
๋ฐ์ดํฐ์ ํ๋ฉด์ ๋ถ๋ฆฌํ๋ ์ต๊ด์ ๋๊ท๋ชจ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํต์ฌ์ ๋๋ค.